home *** CD-ROM | disk | FTP | other *** search
/ Apple Reference & Presen…tion Library 2 (Reseller) / Apple R&P Lib Reseller v2.0.iso / 4-Fonts & Software / Demo Software / AppMaker / Demo AppMaker™ / Demo AppMaker™.rsrc / TmpC_206_FilingMenu < prev    next >
Text File  |  1989-04-09  |  5KB  |  296 lines

  1. /* %filename% */
  2. /* Created %date% %time% by AppMaker */
  3.  
  4. %If MPW%
  5. #include <Types.h>
  6. #include <Quickdraw.h>
  7. #include <Controls.h>
  8. #include <Dialogs.h>
  9. #include <Events.h>
  10. #include <Lists.h>
  11. #include <Menus.h>
  12. #include <TextEdit.h>
  13.  
  14. %end if%
  15. #include "Globals.h"
  16. #include "ResourceDefs.h"
  17. #include "Dispatcher.h"
  18. #include "Miscellany.h"
  19. %UsesDialogs%
  20.  
  21. #include "%unitname%.h"
  22.  
  23. %If MPW%
  24. #include <Desk.h>
  25. #include <Packages.h>
  26. #include <ToolUtils.h>
  27.  
  28. %end if%
  29. #define nil            0L
  30.  
  31. #define dialogTop        75                                   
  32. #define dialogLeft        85
  33.  
  34. short            numOpenTypes;
  35. SFTypeList        openTypeList;
  36. %If MPW%
  37.  
  38. #pragma segment %unitname%
  39. %end if% 
  40.  
  41. /*----------*/
  42. void Init%MenuName% ()
  43. {
  44.     numOpenTypes = 1;
  45.     openTypeList [0] = 'TEXT';
  46. } /*Init%MenuName%*/
  47.  
  48. /*----------*/
  49. Boolean OkToOpen (fType)
  50. OSType            fType;
  51. {
  52.     short            i;
  53.     enum {searching, found, notFound}
  54.                     status;
  55.  
  56.     i = 0;
  57.     status = searching;
  58.     while (status == searching) {
  59.         if (i >= numOpenTypes) {
  60.             status = notFound;
  61.         } else {
  62.             if (fType == openTypeList [i]) {
  63.                 status = found;
  64.             } else {
  65.                 i++;
  66.             }
  67.         }
  68.     } /*while*/
  69.     return (status == found);
  70. } /*OkToOpen*/
  71.  
  72. /*----------*/
  73. Boolean OpenApplFile   (short        vRefNum,
  74.                         Str255        fName,
  75.                         short        *fRefNum);
  76. Boolean OpenApplFile   (vRefNum, fName, fRefNum)
  77. short        vRefNum;
  78. Str255        fName;
  79. short        *fRefNum;
  80. {
  81.     Boolean            okay;
  82.  
  83.   /* application-specific Open file */
  84.     okay = CheckOS (FSOpen (fName, vRefNum, fRefNum));
  85.     return (okay);
  86. } /*OpenApplFile*/
  87.  
  88. /*----------*/
  89. void CloseApplFile (short    fRefNum);
  90. void CloseApplFile (fRefNum)
  91. short        fRefNum;
  92. {
  93.     Boolean            okay;
  94.  
  95.   /* application-specific Close file */
  96.       if (cur->windowKind == 1) { /*1st or only window in set*/
  97.         okay = CheckOS (FSClose (fRefNum));
  98.     }
  99. } /*CloseApplFile*/
  100.  
  101. /*----------*/
  102. void SaveApplFile (short    fRefNum);
  103. void SaveApplFile (fRefNum)
  104. short        fRefNum;
  105. {
  106. %if MPW%
  107. #pragma unused (fRefNum) 
  108.   
  109. %end if%
  110.   /* application-specific Save file */
  111.     cur->dirty = false;
  112. } /*SaveApplFile*/
  113.  
  114. /*----------*/
  115. Boolean ReadApplFile (short        fRefNum);
  116. Boolean ReadApplFile (fRefNum)
  117. short        fRefNum;
  118. {
  119. %if MPW%
  120. #pragma unused (fRefNum) 
  121.   
  122. %end if%
  123.   /* application-specific Read file */
  124.       return (false);
  125. } /*ReadApplFile*/
  126.  
  127. /*----------*/
  128. void DoNew (void);
  129. void DoNew ()
  130. {
  131.     Str255        untitled;
  132.  
  133.     BlockMove (&(**GetString (UntitledID)), untitled, 256);
  134.     OpenWindows (untitled, 0, 0);
  135. } /*DoNew*/
  136.  
  137. /*----------*/
  138. void OpenFile (fileName, vRefNum)
  139. Str255        fileName;
  140. short        vRefNum;
  141. {
  142.     short        fRefNum;
  143.  
  144.     if (OpenApplFile (vRefNum, fileName, &fRefNum)) {
  145.         OpenWindows (fileName, vRefNum, fRefNum);
  146.     }    
  147. } /*OpenFile*/
  148.  
  149. /*----------*/
  150. void DoOpen (void);
  151. void DoOpen ()
  152. {
  153.     Point            dialogOrigin;
  154.     SFReply            sfInfo;
  155.  
  156.     SetPt (&dialogOrigin, dialogLeft, dialogTop);
  157.     SFGetFile (dialogOrigin, "", nil, numOpenTypes, &openTypeList, nil, &sfInfo);
  158.     if (sfInfo.good) {
  159.         OpenFile (sfInfo.fName, sfInfo.vRefNum);
  160.     }
  161. } /*DoOpen*/
  162.  
  163. /*----------*/
  164. void Open0Files ()
  165. {
  166.     DoNew ();
  167. } /*Open0Files*/
  168.  
  169. /*----------*/
  170. void DoSaveAs (void);
  171. void DoSaveAs ()
  172. {
  173.     SFReply            sfInfo;
  174.     short            fRefNum;
  175.     StringHandle    prompt;
  176.     Str255            suggestion;
  177.     StringHandle    untitled;
  178.     
  179.     prompt = GetString (SaveAsPromptID);
  180.     suggestion [0] = 0;
  181.  
  182.     if (CreateFile (&sfInfo, *prompt, suggestion, 'XXXX', 'TEXT')) {
  183.         if (cur->fileNum != 0) {
  184.             CloseApplFile (cur->fileNum);
  185.         }
  186.         if (OpenApplFile (sfInfo.vRefNum, sfInfo.fName, &fRefNum)) {
  187.             SetWTitle (curWindow, sfInfo.fName);
  188.             cur->fileNum = fRefNum;
  189.             cur->volNum = sfInfo.vRefNum;
  190.             SaveApplFile (cur->fileNum);
  191.         } else { /*should never happen*/
  192.             untitled = GetString (UntitledID);
  193.             SetWTitle (curWindow, *untitled);
  194.             cur->fileNum = 0;
  195.             cur->volNum = 0;
  196.         }
  197.     }
  198. } /*DoSaveAs*/
  199.  
  200. /*----------*/
  201. void DoSave (void);
  202. void DoSave ()
  203. {
  204.     if (cur->fileNum == 0) {
  205.         DoSaveAs ();
  206.     } else {
  207.         SaveApplFile (cur->fileNum);
  208.     }
  209. } /*DoSave*/
  210.  
  211. /*----------*/
  212. void CloseApplWindow (void);
  213. void CloseApplWindow ()
  214. {
  215.     enum {saveItem = 1, cancelItem, discardItem};
  216.     
  217.     Str255            curTitle;
  218.     short            itemNum;
  219.     Boolean            okay;
  220.  
  221.     okay = true;
  222.     SetInfo (FrontWindow ());
  223.     if (cur->dirty) {
  224.         GetWTitle (curWindow, curTitle);
  225.         ParamText (curTitle, "", "", "");
  226.         InitCursor ();
  227.         itemNum = Alert (SaveID, nil);
  228.         switch (itemNum) {
  229.         case saveItem:
  230.                 DoSave ();
  231.                 okay = !errorFlag;
  232.             break;
  233.         case discardItem:
  234.                /*Do nothing*/;
  235.             break;
  236.         case cancelItem:
  237.                 errorFlag = true;
  238.                 okay = false;
  239.             break;
  240.         } /*switch*/
  241.     }
  242.     if (okay) {
  243.         if (cur->fileNum != 0) {
  244.             CloseApplFile (cur->fileNum);
  245.         }
  246.         CloseCurWindow ();
  247.     }
  248. } /*CloseApplWindow*/
  249.  
  250. /*----------*/
  251. void DoClose ()
  252. {
  253.     WindowPeek        frontPeek;
  254.  
  255.     frontPeek = (WindowPeek) FrontWindow ();
  256.     if (frontPeek->windowKind < 0) {
  257.         CloseDeskAcc (frontPeek->windowKind);
  258.     } else if (frontPeek->windowKind == dialogKind) {
  259.         CloseModelessDialog (FrontWindow ());
  260.     } else {
  261.         CloseApplWindow ();
  262.     }
  263. } /*DoClose*/
  264.  
  265. /*----------*/
  266. void DoQuit (void);
  267. void DoQuit ()
  268. {
  269.     Boolean            quitting;                             
  270.  
  271.     quitting = true;
  272.     while (quitting && (FrontWindow () != nil)) {
  273.         SystemTask ();
  274.         DoClose ();
  275.         if (errorFlag) {
  276.             quitting = false;
  277.         }
  278.     } /*while*/
  279.     
  280.     if (quitting) {
  281.         quittingTime = true;
  282.     }
  283. } /*DoQuit*/
  284.  
  285. %DoMenuItems%
  286. /*----------*/
  287. void Do%MenuName% (itemNr)
  288. short        itemNr;
  289. {
  290.     errorFlag = false;
  291.     
  292.     switch (itemNr) {
  293.     %HandleMenuItems%
  294.     } /*switch*/
  295. } /*Do%MenuName%*/
  296.